const axios = require('./axios');

module.exports = {
  owner: (option = {}) => option.owner || axios.owner,
  repo: (option = {}) => option.repo || axios.repo,
  ownerAndRepo: (option = {}) => `${option.owner || axios.owner}/${option.repo || axios.repo}`,
  stringToBase64: (str) => {
    /* 将字符串转换为Base64编码 */
    const encoder = new TextEncoder(); // 使用TextEncoder将字符串转换为Uint8Array  
    const uint8Array = encoder.encode(str);
    // 将Uint8Array转换为二进制字符串  
    let binaryString = '';
    for (let i = 0; i < uint8Array.length; i++) { binaryString += String.fromCharCode(uint8Array[i]); }
    return window.btoa(binaryString); // 使用btoa进行Base64编码  
  },
  base64ToString: (base64String) => {
    /* 还原Base64到原始字符串 */
    const binaryString = window.atob(base64String);
    const codeUnits = new Uint8Array(binaryString.length);
    for (let i = 0; i < binaryString.length; i++) { codeUnits[i] = binaryString.charCodeAt(i); }
    return new TextDecoder().decode(codeUnits);
  },
  readAsDataURL: (file, callback) => {
    /* 将(图片或二进制)文件转换成base64,并包含数据URL的字符串（以data:开头的字符串） */
    if (!(file instanceof Blob && typeof FileReader !== 'undefined')) { return (callback(new Error('The File APIs are not fully supported in this browser.'))); }
    const reader = new FileReader();
    // readAsDataURL 方法通常用于图片或二进制数据，它会返回一个包含数据URL的字符串（以data:开头的字符串），该字符串包含了文件的MIME类型和Base64编码的文件内容。
    reader.readAsDataURL(file);
    reader.onload = function () { callback(null, reader.result); };
    reader.onerror = function (error) { callback(error); };
  },
  readAsArrayBuffer: (file, callback) => {
    /* 将(图片或二进制)文件转换成base64,不包含数据URL的字符串,既是没有以data:开头的字符串 */
    var reader = new FileReader();
    // 使用 readAsArrayBuffer 来读取文件  
    // 如果您只关心文件的Base64编码内容而不关心MIME类型，那么您应该使用 readAsArrayBuffer 方法，然后将ArrayBuffer转换为Base64字符串
    reader.readAsArrayBuffer(file);
    reader.onload = function (e) {
      var arrayBuffer = e.target.result;
      var base64 = arrayBufferToBase64(arrayBuffer);
      callback(null, base64);
    };
    reader.onerror = function (error) { callback(error); };
    // 辅助函数，将ArrayBuffer转换为Base64字符串  
    function arrayBufferToBase64(buffer) {
      var binary = '';
      var bytes = new Uint8Array(buffer);
      var len = bytes.byteLength;
      for (var i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); }
      return window.btoa(binary);
    }
  }
}